Logging an execution-timeΒΆ

import functools
import logging
import time


 def logged(method):
     """ Logging an execution-time """
     @functools.wraps(method)
     def inner(*args, **kwargs):
         start_time = time.time()
         # Run the decorated method
         return_value = method(*args, **kwargs)
         # Calculate the completion time
         end_time = time.time()
         exec_time = end_time - start_time
         # Log the method call and the result
         logger = logging.getLogger('decorator.logged')
         logger.warning('Called method %s at %.02f; execution time: %.02f seconds; result: %r' \
                        %(method.__name__, start_time, exec_time, return_value))
         return return_value
     return inner

@logged
def sleep_and_return(return_value):
    time.sleep(2)
    return return_value
print(sleep_and_return(21))

if __name__ == "__main__":
    value = sleep_and_return(21)

Result:

Called method sleep_and_return at 1579328869.54; execution time: 2.00 seconds; result: 21